//
//  HJCTextView.swift
//  表情键盘
//
//  Created by 郝俊聪 on 15/5/25.
//  Copyright (c) 2015年 heima. All rights reserved.
//

import UIKit

class HJCTextView: UITextView {
    

    ///插入表情
    func insertEmoticon(cell:EmoticonCell){
        //获取到cell的数据模型
        let emoticon = cell.emoticon
        //执行插入表情方法
        textViewINsertEmoticon(emoticon!)
    }
    
    ///文本插入表情的具体操作
    func textViewINsertEmoticon(emoticon:Emoticon){
        //如果是空按钮
        if emoticon.isEmpty {
            println("空")
            return
        }
        //如果是删除按钮，执行删除操作
        if emoticon.isDelete {
            deleteText()
            return
        }
        //如果是表情
        if emoticon.png != nil{
            insertImage(emoticon)
            return
        }
        //如果是emoji
        if emoticon.code != nil{
            insertEmoji(emoticon)
            return
        }
    }
    
    ///删除文本
    func deleteText(){
        deleteBackward()
    }
    
    ///插入图片
    func insertImage(emoticon:Emoticon){
        //设置字体
        font = UIFont.systemFontOfSize(24)
        //创建附件(自定义HJCTextAttachment，记录chs，方便反向转换)
        let attachment = HJCTextAttachment()
        //设置附件的照片
        attachment.image = UIImage(contentsOfFile: emoticon.png!)
        //插入同时，在自定义附件中记录chs
        attachment.chs = emoticon.chs
        //设置附件的大小
        attachment.bounds = CGRectMake(0, -4,font.lineHeight,font.lineHeight)
        //将附件转成NSAttributedString类型的属性化文本
        let attStr = NSAttributedString(attachment: attachment)
        
        //获取textView的所有文本，转成可变的文本
        var mutableStr = NSMutableAttributedString(attributedString: attributedText)
        //获得目前光标的位置
        let selectedRange = self.selectedRange
        //插入文字
        mutableStr.insertAttributedString(attStr, atIndex: selectedRange.location)
        //设置可变文本的字体属性
        mutableStr.addAttribute(NSFontAttributeName, value: UIFont.systemFontOfSize(24), range: NSMakeRange(0,mutableStr.length))
        //再次记住新的光标的位置
        let newSelectedRange = NSMakeRange(selectedRange.location+1, 0)
        //重新给文本赋值
        attributedText = mutableStr
        //恢复光标的位置（上面一句代码执行之后，光标会移到最后面）
        self.selectedRange = newSelectedRange
    }
    
    ///插入emoji
    func insertEmoji(emoticon:Emoticon){
        insertText(emoticon.emojiStr!)
    }
    
    
    ///将textView中的图片转成字符
    func fullText() -> (String!){
        //获得属性文本
        let attriText = attributedText
        
        //定义一个字符串用于接收转换的字符
        var strM = String()
        
        //遍历属性文本
        attriText.enumerateAttributesInRange(NSMakeRange(0, attriText.length), options: NSAttributedStringEnumerationOptions.allZeros) { (dict,range,_) -> Void in
            
            //获得附件
            if let attachment = dict["NSAttachment"] as? HJCTextAttachment{
                //将附件的文字加入字符串
                strM += attachment.chs!
                println(attachment.chs)
                println(attachment.image)
            }else{
                //当是文字的时候,根据range获得字符串段
                let str = (attriText.string as NSString).substringWithRange(range)
                //                加入数组中
                strM += str
            }
        }
        return strM
    }

    
    
}
